home *** CD-ROM | disk | FTP | other *** search
- #include "HyperXCmd.h"
- #include "FileMgr.h"
- #include "HFS.h"
- #include "ResourceMgr.h"
- #include "SetUpA4.h"
-
-
-
-
- #define False 0
- #define True !False
- #define Nil 0L
-
-
-
-
- /*------------------------------------------------------------------------
-
- ------------------------------------------------------------------------*/
- pascal main(paramPtr)
- XCmdBlockPtr paramPtr;
- {
- Str255 fName,str,fullPath,vName;
- HParamBlockRec MyHPB;
- CInfoPBRec MyCIPB;
- OSErr fErr;
- short theVol;
- Handle nameH;
- long theDir,foundDir;
-
- RememberA0();
- SetUpA4();
-
- if ((paramPtr->paramCount < 1) || (paramPtr->paramCount > 2))
- {
- SysBeep(10);
- /* return error string */
- goto Done;
- }
-
- ZeroToPas(paramPtr,*((unsigned char **)paramPtr->params[0]),fName);
- if (paramPtr->paramCount == 2)
- {
- ZeroToPas(paramPtr,*((unsigned char **)paramPtr->params[1]),vName);
- if (vName[vName[0]] != ':')
- {
- vName[0]++;
- vName[vName[0]] = ':';
- }
- MyHPB.volumeParam.ioCompletion = Nil;
- MyHPB.volumeParam.ioNamePtr = vName;
- MyHPB.volumeParam.ioVRefNum = 0;
- MyHPB.volumeParam.ioVolIndex = -1;
- fErr = PBHGetVInfo(&MyHPB,False);
- if (fErr)
- {
- SysBeep(10);
- /* return error string */
- goto Done;
- }
- theVol = MyHPB.volumeParam.ioVRefNum;
- }
- else theVol = GetSysVol();
-
- MyCIPB.dirInfo.ioCompletion = 0L;
- MyCIPB.dirInfo.ioNamePtr = 0L;
- MyCIPB.dirInfo.ioVRefNum = theVol;
- MyCIPB.dirInfo.ioFDirIndex = 0;
- MyCIPB.dirInfo.ioDrDirID = 2L;
- fErr = PBGetCatInfo(&MyCIPB,False);
-
- if (fErr)
- {
- SysBeep(10);
- /* return error string */
- goto Done;
- }
- else
- {
- fErr = SearchFile(2L,MyCIPB.dirInfo.ioDrNmFls,theVol,&fName,&foundDir);
- if (fErr)
- {
- SysBeep(10);
- /* return error string */
- goto Done;
- }
-
- fullPath[0] = 0;
- PstrCopy(fullPath,fName);
-
- MyCIPB.dirInfo.ioCompletion = Nil;
- MyCIPB.dirInfo.ioNamePtr = str;
- MyCIPB.dirInfo.ioVRefNum = theVol;
- MyCIPB.dirInfo.ioFDirIndex = -1;
- MyCIPB.dirInfo.ioDrDirID = foundDir;
- fErr = PBGetCatInfo(&MyCIPB,False);
- PrependStr(MyCIPB.dirInfo.ioNamePtr,fullPath);
-
- do {
- MyCIPB.dirInfo.ioDrDirID = MyCIPB.dirInfo.ioDrParID;
- fErr = PBGetCatInfo(&MyCIPB,False);
- if (fErr == noErr) PrependStr(MyCIPB.dirInfo.ioNamePtr,fullPath);
- } while (fErr == noErr);
-
- paramPtr->returnValue = PasToZero(paramPtr,(StringPtr)fullPath);
- }
-
- Done:
- RestoreA4();
- }
-
-
-
-
- SearchFile(theDir,count,theVol,fName,foundDir)
- long theDir;
- short count,theVol;
- Str255 *fName;
- long *foundDir;
- {
- short I;
- OSErr fErr;
- Str255 str;
- CInfoPBPtr MyCIPB;
-
- MyCIPB = (CInfoPBPtr)NewPtr(sizeof(CInfoPBRec));
- for (I=1;I<=count;I++)
- {
- str[0] = 0;
- MyCIPB->dirInfo.ioCompletion = Nil;
- MyCIPB->dirInfo.ioNamePtr = str;
- MyCIPB->dirInfo.ioVRefNum = theVol;
- MyCIPB->dirInfo.ioFDirIndex = I;
- MyCIPB->dirInfo.ioDrDirID = theDir;
- fErr = PBGetCatInfo(MyCIPB,False);
- if (fErr)
- {
- SysBeep(10);
- return (fErr);
- }
- else
- {
- if (!(MyCIPB->dirInfo.ioFlAttrib & 0x10))
- {
- if (EqualString(fName,MyCIPB->dirInfo.ioNamePtr,False,True))
- {
- *foundDir = MyCIPB->hFileInfo.ioFlParID;
- return (0);
- }
- }
- }
- }
-
- for (I=1;I<=count;I++)
- {
- str[0] = 0;
- MyCIPB->dirInfo.ioCompletion = Nil;
- MyCIPB->dirInfo.ioNamePtr = str;
- MyCIPB->dirInfo.ioVRefNum = theVol;
- MyCIPB->dirInfo.ioFDirIndex = I;
- MyCIPB->dirInfo.ioDrDirID = theDir;
- fErr = PBGetCatInfo(MyCIPB,False);
- if (fErr)
- {
- SysBeep(10);
- return (fErr);
- }
- else
- {
- if (MyCIPB->dirInfo.ioFlAttrib & 0x10)
- {
- fErr = SearchFile(MyCIPB->dirInfo.ioDrDirID,
- MyCIPB->dirInfo.ioDrNmFls,
- theVol,
- fName,
- foundDir);
- if (!fErr) return (0);
- }
- }
- }
-
- DisposPtr(MyCIPB);
- return (fnfErr);
- }
-
-
-
-
- PrependStr(s1,s2)
- char *s1,*s2;
- {
- Str255 temp;
-
- PstrCopy(temp,s2);
- s1[0]++;
- s1[s1[0]] = ':';
- PstrCopy(s2,s1);
- BlockMove(&(temp[1]),&(s2[s2[0]+1]),(long)temp[0]);
- s2[0] += temp[0];
- }
-
-
-
-
-
-
- PstrCopy(s1,s2)
- char *s1,*s2;
- {
- short len;
-
- for (len=*s2;len>=0;--len) *s1++ = *s2++;
- }
-
-
-
-
-
- GetSysVol()
- {
- short vRefNum;
- OSErr FErr;
-
- FErr = GetVRefNum(SysMap,&vRefNum);
- return vRefNum;
- }
-
-
-